#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h>
#include <stdlib.h>



/*
 *
 *
 *查看进程：
 1，top指令
 2，ps -aux/-axj
 3，/proc 目录
 创建一个子进程---fork(  )Linux系统调用接口
 1，创建失败返回-1
 2，给父进程返回子进程的pid
 3，给子进程返回0

 进程状态
 R+：运行状态加前端进程
 S：可中断睡眠状态
 D：不可中断睡眠状态
 X：死亡状态，待回收
 Z：僵尸状态，待确定（死亡）状态

 孤儿进程：当子进程的父进程提前挂掉，则该子进程交给init（1号进程）领养

 优先级：
 1，优先级与权限的区别，优先级是决定谁先谁后，而权限是决定谁能不能
 2，新PRI=旧PRI+nice值
 3，top + r + pid + NI值

 并行：
 在某一时刻多个进程在多个CPU中运行

 并发：
 在某一段时间多个进程在一个CPU上运行，任务都得到了推进

 时间片：
 每一个进程在CPU上的运行时间

 上下文：
 当一个进程在CPU上运行结束时，该进程会带走CPU上寄存器的数据，以便下次运行能与该次运行
 的进度衔接

 竞争：
 独立：

 环境变量：
 1，PATH
 2，HOME
 3，SHELL
 4，getenv
 5，environ

 c/c++中main函数的三个参数

 int argc , char* argv[  ] , char* env[  ]u
 * */

int main(int argc,char* argv[],char* env[])
{

    extern char**  environ;

    pid_t id =fork();

    if(id==0)
    {
        printf("begin-------------------------------------------------------------\n");
        for(int i=0;environ[i];i++)
        {
            printf("%s\n",environ[i]);
        }
        printf("end---------------------------------------------------------------\n");

        for(int i=0;i<argc;i++)
        {
            printf("%s\n",argv[i]);
        }

    }
    else 
    {
        printf("begin-------------------------------------------------------------\n");
        for(int i=0;environ[i];i++)
        {
            printf("%s\n",environ[i]);
        }
        printf("end---------------------------------------------------------------\n");
       
        for(int i=0;i<argc;i++)
        {
            printf("%s\n",argv[i]);
        }
            
    }



//    printf("%s\n",getenv("PATH")); 
/*    
    pid_t id =getpid(); 
    
    while(1)
    {
        sleep(1);
        printf("pid:%d\n",getpid());
    }
 */ 
    /*
    if(id<0)
    {
        printf("子进程创建失败\n");
    }
    else if(id==0)
    {
        while(1)
        {
            printf("I am child process pid:%d ppid:%d \n",getpid(),getppid());
            sleep(1);
        }
    }
    else 
    {
        while(1)
        {
            printf("I am father process pid:%d ppid:%d \n",getpid(),getppid());
            sleep(1);
        }
    }


*/
    /*
    while(1)
    {
        printf("pid:%d  ppid:%d \n",getpid(),getppid());
        sleep(1);
    }
*/ 

}
